#pragma once
#include <iostream>
#include <string>
#include <cstring>
#include <functional>
using namespace std;

// server服务
void serviceIO(const int &serversockfd)
{
    // udp面向字节流，可以直接读取数据
    char buffer[1024];
    while (true)
    {
        memset(buffer, 0, sizeof(buffer));
        // 读数据
        ssize_t n = read(serversockfd, buffer, sizeof(buffer) - 1);
        if (n > 0)
        {
            buffer[n] = 0;
            cout << "server receive message:" << buffer << endl;

            // 将数据转发回发送方
            string outbuffer = buffer;
            outbuffer += " server[echo]";
            write(serversockfd, outbuffer.c_str(), outbuffer.size()); // 转发数据
        }
        else
        {
            // 网络通信中，如果读取的数据为0，说明客户端退出
            LogMessage(NORMAL, "client quit me too");
            break;
        }
    }
    close(serversockfd); // 关闭套接字
}

class Task
{
    using func_t = std::function<void(int)>; // func是一个函数
public:
    Task() {}

    Task(int sock, func_t func)
        : _sock(sock), _callback(func) {}

    void operator()()
    {
        _callback(_sock);
    }

private:
    int _sock;
    func_t _callback; // 调用的函数
};